package com.foreknow.controller;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

/**
 * Servlet:服务器端的应用程序
 * 目前来说的主要作用：
 * 1.处理客户端的需求
 * 2.可以搜集表单的数据
 *
 * 如何创建一个servlet程序：将当前类继承HttpServlet
 * 继承之后我们要重写父类中的方法
 *
 * 这两个对象是由web容器（服务器）自动帮我们初始化的，无需自己初始化
 *
 * HttpServletRequest接口 request  请求   这个对象会封装一些客户端的请求参数
 * HttpServletResponse接口 response 响应   向客户端返回一些内容
 *
 * 什么是Servlet：就是一个服务器端的应用程序
 * 作用：
 * 1.可以读取客户端发送的所有数据
 * 2.查询http请求中包含的任何其它信息(获取请求参数)
 * 3.处理数据并生成结果
 * 4.还可以设置合适的http响应参数
 * 5.将响应的信息发送给客户端
 *
 * 1.要想创建一个Servlet，那么就一定要继承HttpServlet
 * 2.要重写doGet/doPost方法。
 *      这两个方法什么时候会调用：如果客户端向服务器端发送的请求是get请求，那么就会自动去调用Servlet中的doGet()方法
 *                            如果客户端向服务器端发送的请求是post请求，那么就会自动去调用Servlet中的doPost()方法
 * 3.方法的参数：
 *      HttpServletRequest req  接口 ：这个接口无需我们自己初始化，服务器(Web容器)会自动将它进行初始化.
 *          这个接口中会提供一些方法：例如  获取一些请求的参数
 *      HttpServletResponse resp 接口 ：这个接口无需我们自己初始化，服务器(Web容器)会自动将它进行初始化.
 *
 *      以上的参数大家可以从网络上下载JavaEE6的开发文档：javax.servlet.http
 *      * Servlet的生命周期：就是一个对象从它被创建开始一直到这个对象被销毁掉。
 *   三个阶段：
 *   1.初始化阶段 init()
 *   2.响应客户端请求的阶段  service()
 *   3.销毁阶段 destroy()
 */

public class FirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置服务器端向客户端响应的内容的类型(MIME)
        resp.setContentType("text/html;charset=utf-8");
        //要使用这个对象中的方法在页面中输出内容
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>这是一个servlet程序</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>这是一个测试程序servlet</h1>");
        out.println("客户端向服务端请求的方法:"+req.getMethod()+"<br>");
        out.println("获取请求的url:"+req.getRequestURL()+"<br>");
        out.println("获取请求的uri:"+req.getRequestURI()+"<br>");
        out.println("获取到当前项目的名称:"+req.getContextPath()+"<br>");
        out.println("获取到本地端口号:"+req.getLocalPort()+"<br>");
        out.println("获取到http协议名称:"+req.getProtocol()+"<br>");
        out.println(new Date()+"<br>");
        out.println("</html>");
        out.flush();
        out.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    public void destroy() {
        System.out.println("destroy....");
    }

//    @Override
//    public void init() throws ServletException {
//        //只被调用一次init()方法
//        System.out.println("init......初始化");
//    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        //ServletConfig:使用此对象中的方法可以获取web，xml中配置的初始化参数  getInitParameter只能获取到局部的初始化参数
        String pageSize=config.getInitParameter( "pageSize");//只能获取局部参数
        //如何获取到全局的初始化参数,一定要先调用ServletConfig的getServletContext()方法
//        String pageSize= config.getServletContext().getInitParameter("pageSize");//可以获取全局参数
        System.out.println(pageSize);
    }

    public FirstServlet() {
        super();
    }
}
